class Solution {//leetcode17——电话号码的字母组合
private:
    void initializerCode(){
        _codeset[0]="abc";
        _codeset[1]="def";
        _codeset[2]="ghi";
        _codeset[3]="jkl";
        _codeset[4]="mno";
        _codeset[5]="pqrs";
        _codeset[6]="tuv";
        _codeset[7]="wxyz";
    }
    void _dfs(const string&digits,int pos){
        if(pos==digits.size()){
            ret.push_back(path);
            return;
        }
        int n=digits.size();
        char code=digits[pos];
        for(auto ch:_codeset[code-'0'-2]){
            path.push_back(ch);
            _dfs(digits,pos+1);
            path.pop_back();
        }
    }
public:
    vector<string> letterCombinations(string digits) { 
        if(digits.empty()) return ret;
        initializerCode();
        _dfs(digits,0);    
        return ret;
    }
private:
    string _codeset[8];
    vector<string> ret;
    string path;
};